Skip to content

ci: alert on Slack when a release publish job fails - #1244

Merged
Patrick Nilan (pnilan) merged 1 commit into
mainfrom
devin/1792619061-alert-publish-failure
Oct 22, 2026
Merged

Patrick Nilan (pnilan) merged 1 commit into
mainfrom
devin/1792619061-alert-publish-failure

Conversation

@devin-ai-integration

Copy link
Copy Markdown
Contributor

Resolves https://github.com/airbytehq/airbyte-internal-issues/issues/18062:

Close on merge: yes — internally filed, no customer to confirm with.

Summary

Adds a final notify-publish-failure job to the CDK Publish workflow (.github/workflows/publish.yml) that posts to Slack when a tag-triggered release fails to publish. Today the only Slack messages come from update-connector-builder, which doesn't depend on publish_sdm/publish_cdk (so their failures are invisible and it still posts success) and is skipped when publish_manifest_server fails (so its failure message never posts). Example: run 17474487668 had all three publish jobs fail, the Builder job skipped, and no alert; run 32521540962 had build fail with nothing posted.

notify-publish-failure:
  needs: [build, publish_cdk, publish_sdm, publish_manifest_server]
  if: failure() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
  steps:
    - Summarize job results   # needs.<job>.result -> FAILED_JOBS / NOT_RUN_JOBS (via env:, not inline ${{ }})
    - Post to Slack           # same pattern as the Builder job: slackapi/slack-github-action@v1.23.0,
                              # SLACK_BOT_TOKEN_AIRBYTE_TEAM, channel C04J1M66D8B, continue-on-error: true

The message includes the version (needs.build.outputs.VERSION, falling back to github.ref_name when build itself failed), the failed job(s), jobs that didn't run (skipped/cancelled because of an upstream failure), and a link to the run. Existing job dependencies are unchanged and there are no Docker Hub retries (both out of scope per the issue).

Secret scope: the new job has no environment:. SLACK_BOT_TOKEN_AIRBYTE_TEAM is already used by notify-slack in slack-pr-notification.yml, which also has no environment:, so it looks like a repo- or org-level secret. I couldn't list the repo's secrets to confirm this (HTTP 403).

Case analysis

failure() in a job-level if: is true when any ancestor job failed. It is false on full success and on cancellation. Without it, a job whose needs failed is skipped.

Scenario Job runs? Message
Tag release, all jobs succeed No (failure() false) nothing new
Tag release, publish_sdm fails Yes Failed: Publish SDM to DockerHub
Tag release, publish_manifest_server fails (Builder job skipped) Yes Failed: Publish Manifest Server to DockerHub
Tag release, publish_cdk fails Yes Failed: Publish CDK to PyPI
Tag release, build fails (e.g. bad tag v.7.28.2) Yes Failed: Build Python Package; Did not run: the three publish jobs; version shown as the tag name
workflow_dispatch prerelease, any failure No (event_name != 'push') nothing
Run cancelled No (failure() false) nothing

The alert step has continue-on-error: true, and the summary step only classifies strings, so the alert can't fail the workflow. A failure in the alert job would still show on its own job, but it can't turn a successful release red, because the job only runs after something has already failed.

Validation

  • actionlint .github/workflows/publish.yml: no new findings. The output is identical in size (36 lines) to main, and the findings are pre-existing shellcheck infos in the build and Builder jobs.
  • I pulled the summary step's script out of the YAML and ran it locally with the needs.*.result combinations above. Example output for a build failure: FAILED_JOBS=Build Python Package and NOT_RUN_JOBS=Publish CDK to PyPI, Publish SDM to DockerHub, Publish Manifest Server to DockerHub.
  • Not tested end to end: that would need a real tag release, and I did not push any tags.

Open decisions for the reviewer

  • Channel: defaults to #dev-connectors-extensibility-releases (C04J1M66D8B), where the existing release messages go. Should it go to an APIs team channel instead?
  • Prereleases: alerts are limited to tag-triggered releases. workflow_dispatch prereleases are excluded because whoever starts one is watching it.
  • Builder job failure: update-connector-builder is not in needs; it already posts its own failure message.

Declarative-First Evaluation

N/A: this is a CI workflow change only, with no connector or declarative components.

Test Coverage

This repo has no automated test harness for GitHub Actions workflows. Coverage is actionlint plus running the summary step's script locally for each scenario (see Validation).

Link to Devin session: https://app.devin.ai/sessions/1915791f4159447dadacbafc3d35346d
Open in Devin Desktop: https://app.devin.ai/desktop/session/1915791f4159447dadacbafc3d35346d?variant=devin

Co-Authored-By: bot_apk <apk@cognition.ai>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@github-actions

Copy link
Copy Markdown

👋 Greetings, Airbyte Team Member!

Here are some helpful tips and reminders for your convenience.

💡 Show Tips and Tricks

Testing This CDK Version

You can test this version of the CDK using the following:

# Run the CLI from this branch:
uvx 'git+https://github.com/airbytehq/airbyte-python-cdk.git@devin/1792619061-alert-publish-failure#egg=airbyte-python-cdk[dev]' --help

# Update a connector to use the CDK from this branch ref:
cd airbyte-integrations/connectors/source-example
poe use-cdk-branch devin/1792619061-alert-publish-failure

PR Slash Commands

Airbyte Maintainers can execute the following slash commands on your PR:

  • /autofix - Fixes most formatting and linting issues
  • /poetry-lock - Updates poetry.lock file
  • /test - Runs connector tests with the updated CDK
  • /prerelease - Triggers a prerelease publish with default arguments
  • /poe build - Regenerate git-committed build artifacts, such as the pydantic models which are generated from the manifest JSON schema in YAML.
  • /poe <command> - Runs any poe command in the CDK environment
📚 Show Repo Guidance

Helpful Resources

📝 Edit this welcome message.

@github-actions

Copy link
Copy Markdown

PyTest Results (Fast)

5 838 tests  ±0   5 807 ✅ ±0   12m 22s ⏱️ + 2m 27s
    1 suites ±0      31 💤 ±0 
    1 files   ±0       0 ❌ ±0 

Results for commit ee1505c. ± Comparison against base commit 693f39a.

@pnilan
Patrick Nilan (pnilan) marked this pull request as ready for review October 22, 2026 16:40
@pnilan
Patrick Nilan (pnilan) requested a review from a team as a code owner October 22, 2026 16:40
@pnilan
Patrick Nilan (pnilan) merged commit 41af85a into main Oct 22, 2026
26 checks passed
@pnilan
Patrick Nilan (pnilan) deleted the devin/1792619061-alert-publish-failure branch October 22, 2026 18:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants